import {uniq} from 'lodash';

export interface ColumnRefInfo {
  columns: string[];
}

const columnRefRegex = /^[A-Z]$/;

/**
 * 解析表达式中的列引用
 * @param expression 表达式
 */
export function parseColumnRefs(expression: string): ColumnRefInfo {
  const ret: ColumnRefInfo = {
    columns: []
  };

  // 移除所有空白字符
  expression = expression.replace(/\s/g, '');

  // 匹配单个大写字母(列引用)
  const matches = expression.match(/[A-Z](?![A-Z0-9])/g) || [];
  
  // 过滤并收集有效的列引用
  ret.columns = matches.filter(col => columnRefRegex.test(col));

  // 去重处理
  return {
    columns: uniq(ret.columns)
  };
}
